Matrizen und Attributsvektoren während des Verfahrensablaufs kombinieren
Das Verfahren Kombination von Matrizen und Vektoren bietet umfangreiche Möglichkeiten für die Neuberechnung einzelner oder mehrere Matrizen. Insbesondere können Sie gleichartige Operationen auf mehrere Matrizen in einem Verfahrensschritt durchführen. Sie können die aufgeführten Beispiele aber auch für die Auswahl von Matrizen über Eigenschaften in vielen anderen Verfahren, bei denen Matrizen verwendet werden, anwenden.
1. Klicken Sie in der Symbolleiste auf das Symbol Verfahrensablauf öffnen.
Das Fenster Verfahrensablauf öffnet sich.
2. Fügen Sie an der gewünschten Stelle im Verfahrensablauf das Verfahren Kombination von Matrizen und Vektoren aus der Kategorie Matrizen ein (Verfahrensablauf festlegen und starten).
3. Klicken Sie in der Zeile des neu eingefügten Verfahrens auf die Schaltfläche in der Spalte Bezugsobjekt(e).
Das Fenster Formel für Matrix bearbeiten öffnet sich.
4. Nehmen Sie die gewünschten Einstellungen vor (Aus Formel berechnete Matrix erstellen).
Hinweis: Exemplarische Anwendungen für das Verfahren finden Sie im Anschluss. |
5. Bestätigen Sie mit OK.
Die ausgewählte Matrix wird in die Spalte Bezugsobjekt(e) übernommen.
6. Führen Sie das Verfahren aus (Verfahren im Verfahrensablauf ausführen).
Die Kombination wird berechnet. Das Ergebnis wird in die ausgewählte Ergebnismatrix gespeichert.
Durch das Verfahren können Sie eine einzelne oder mehrere Matrizen berechnen.
Im Editierfeld legen Sie sowohl die Ergebnismatrix (-matrizen) selbst als auch die Einstellungen zur Berechnung fest. Ergebnis und Berechnungsanweisung werden durch das Zuweisungszeichen := getrennt.
Tipp: Es gibt verschiedene Tastenkombinationen, die Ihnen die Arbeit im Formeleditor erleichtern (Tastenkombinationen im Formeleditor für Formelattribute und Formelmatrizen). |
Beispiel mit Ergebnismatrix und Berechnungsanweisung
Matrix(1):= Matrix(2) + Matrix(3)
Die Auswahl der Matrizen kann alternativ zur Matrixnummer auch über die Eigenschaften vorgenommen werden. Dazu wird folgende Schreibweise verwendet.
Matrix([Attribut1] = Attributwert1 & [Attribut2] = Attributwert2 & …)
Attribute werden mit der in eckigen Klammern gesetzten eindeutigen Attributsbezeichnung (ID) angegeben. Die Attribut ID wird ohne Berücksichtigung der Groß- und Kleinschreibung interpretiert.
Außer der Verknüpfung der Attribute durch & (Und) ist alternativ eine Verknüpfung durch | (logisches Oder) möglich. Ebenso kann die Gleichheit eines Attributwerts durch andere Operatoren, beispielsweise wie !=, > , < ersetzt werden. Eine Beschränkung auf bestimmte Attributwerte, die aus Zeichenketten bestehen, ist durch das Schlüsselwort IN möglich. Die Menge der Attributwerte wird in geschweifte Klammern gesetzt und durch Komma getrennt.
Beispiele für die Auswahl von Matrizen über Eigenschaften
Matrix nach Eigenschaften |
Rückgabewert |
---|---|
Matrix([NO] = 1) |
Gibt die Matrix mit der Nr. 1 zurück. Matrix(1) ist als Kurzschreibweise von Matrix([No] = 1) möglich. |
Matrix([NAME] = “Car“) |
Gibt alle Matrizen mit dem Namen Car zurück. |
Matrix([CODE] = “TTC“ & [NSEGCODE] = “C“) |
Gibt alle Matrizen mit dem Code TTC und dem Nachfragesegmentcode C zurück. |
Matrix([CODE] = „TWT“ | [CODE] = “IVT“ & [NSEGCODE] = “PT“) |
Gibt alle Matrizen mit dem Code TWT oder IVT und dem Nachfragesegmentcode PT zurück. |
Matrix([CODE] IN {“TWT“, “IVT“} & [NSEGCODE] = “PT“) |
Gibt alle Matrizen mit dem Code “TWT oder “IVT“ und dem Nachfragesegmentcode “PT“ zurück |
Matrix([NSEGCODE] IN {“PT“, ““} ) |
Liefert alle Matrizen, deren Nachfragesegmentcode entweder PT oder leer ist, zurück |
Matrix([NSEGCODE] != ““ ) |
Liefert alle Matrizen mit nicht leerem Nachfragesegmentcode zurück. |
Matrix([NACHFRMODELLCODE] = “M01“ & [NSCHICHTCODE] = “HWc“ & [MODUSCODE] = "") |
Liefert alle Matrizen, deren Nachfragemodellcode M01, Nachfrageschichtcode HWc ist und deren Moduscode leer ist. |
Hinweis: Stellen Sie sicher, dass die verwendeten Matrizen eindeutig durch die Eigenschaften definiert sind. Dazu kann es notwendig sein, dass Attributwerte leer sind. |
Matrixattribute mit einer begrenzten Anzahl von möglichen Ausprägungen werden durch Zahlen dargestellt. Die folgende Tabelle enthält diese Matrixattribute mit einer begrenzten Zahl von Ausprägungen, die in Formeln als Nummer angezeigt werden:
Attribut-ID |
Ausprägung |
---|---|
MATRIXTYP |
1 = Extern 3 = Nachfrage 4 = Kenngröße |
BEZUGSTYP |
1 = kein Netzbezug 2 = Bezirk 3 = Oberbezirk 4 = Haltestellenbereich |
DATENQUELLENTYP |
1 = Daten 2 = Formel |
Sie können direkt im Eingabefeld alle Eingaben vornehmen oder die Schaltflächen zur Auswahl der Operanden, Operatoren, Funktionen, Schleifen und Klammern verwenden. Einige Schlüsselwörter, sowie das Zuweisungszeichen := stehen jedoch nur über die direkte Eingabe im Editierfeld zur Verfügung.
Schlüsselwort | Beschreibung |
---|---|
:= |
ergibt sich aus Zuweisung einer Berechnungsanweisung (rechte Seite des Terms) zu einer oder mehreren Ergebnismatrizen (linke Seite des Terms) |
IN{} |
enthalten in Definition einer Mengen von Zeichenketten, deren Elemente von geschweiften Klammern umschlossen und durch Kommas getrennt werden. |
Context |
Verwendung bei der Mehrfachbearbeitung von Matrizen Beispielsweise wird in Nachfrageverfahren durch das Schlüsselwort Context die Abhängigkeit zum jeweiligen Netzobjekt (beispielsweise Personengruppe, Modus) hergestellt und Matrixattribute der Eingabe- und Ausgabematrizen werden entsprechend interpretiert. Bei der Mehrfachbearbeitung von Matrizen im Verfahren Kombination von Matrizen und Vektoren (ForEach), ist das Schlüsselwort Contextauf der rechten Seite des Zuweisungszeichens zulässig. Contextbezeichnet die Matrix, an die zugewiesen wird, d.h. die auf der linken Seite des Zuweisungszeichens steht. Damit kann in der Berechnungsformel auf Attribute der Zielmatrix zugegriffen werden auch wenn sie nicht explizit auf der rechten Seite definiert sind. |
MatrixList() |
erlaubt eine Operation mit mehreren Matrizen, deren Eigenschaften in runden Klammern festgelegt werden |
Sum, Min, Max, Average, Product |
Matrixkombinationsfunktionen, die unter anderem im Zusammenhang mit MatrixList() verwendet werden können. Kombinationsfunktionen wirken elementweise. |
Beispiele für die Berechnung einzelner Matrizen unter Nutzung von Matrixeigenschaften
Matrix([CODE] = „C“ & [NAME] = „CAR“ & [NSEGCODE] = „C“) :=
Matrix([CODE] = „privC“ & [NAME] = „private CAR“) +
Matrix([CODE] = „busC“ & [NAME] = „business CAR“)
Die beiden Matrizen auf der rechten Seite des Zuweisungszeichens := müssen eindeutig durch die Attribute CODE und NAME definiert sein. Die Matrix auf der linken Seite wird erzeugt, sollte eine Matrix mit den Eigenschaften noch nicht im Netz existieren. Existiert die Matrix mit den Eigenschaften bereits, werden die Werte überschrieben.
Matrix([CODE]="TripDistImpedance" & [NAME]="TripDistImpedance" & [MATRIXTYP]=4)
:= Matrix([CODE]="TTC" & [NSEGCODE]="C" & [MATRIXTYP]=4)
Zur Berechnung der Matrix mit dem Code und Namen “TripDistImpedance” muss eine Kenngrößenmatrix "TTC“ für das Nachfragesegment C zuvor berechnet worden sein.
Beispiele für Formeln mit der Operation MatrixList und Matrixkombinationsfunktionen
Matrix(9) := Sum(MatrixList([NSEGCODE] = "C" | [NSEGCODE] = "H"))
Die Summe über alle Matrizen, deren Nachfragesegmentcode C oder H ist, wird in Matrix 9 gespeichert.
Matrix([NAME]="Min JRT") := 0.5*Min(MatrixList([CODE]="JRT" & [NSEGCODE] in {"PuT", "PuT2"}))
Es wird elementweise das Minimum der ÖV-Kenngrößenmatrizen für die Kenngröße Reisezeit der Nachfragesegmente PuT und PuT2 berechnet und mit 0,5 multipliziert. Das Ergebnis wird in der Matrix mit dem Namen Min JRT gespeichert.
Beispiele für Formeln mit Funktionen
Operation | Matrixformel |
---|---|
Logarithmus |
Matrix(<Nummer>) := Ln(Matrix(<Nummer>)) |
Exponentialfunktion |
Matrix(<Nummer>) := Exp(Matrix(<Nummer>)) |
Kehrwert |
Matrix(<Nummer>) := Reciprocal(Matrix(<Nummer>)) |
Transponieren |
Matrix(<Nummer>) := Transpose(Matrix(<Nummer>)) |
Oberes Dreieck spiegeln |
Matrix(<Nummer>) := Mirror_Upper(Matrix(<Nummer>)) |
Unteres Dreieck spiegeln |
Matrix(<Nummer>) := Mirror_Lower(Matrix(<Nummer>)) |
Symmetrisieren |
Matrix(<Nummer>) := Symmetrize(Matrix(<Nummer>)) |
Beispiele mit ForEach
- Beispiel 1 Kenngrößenmatrizen mitteln
In einem Modell sollen Kenngrößenmatrizen aus aufeinanderfolgenden Iterationen gemittelt werden. Dafür werden:
- Kenngrößenmatrizen initial berechnet
- Kenngrößenmatrizen dupliziert, wobei ein benutzerdefiniertes Attribut (BDA) mit der ID „S-Typ“ auf den Wert avg gesetzt wird
- innerhalb der Schleife wird gemittelt
Kenngrößenmatrizen können durch die Kombination aus Code, Matrixtyp „Kenngröße“ und Nachfragesegmentcode eindeutig identifiziert werden. Um die nachfolgend gezeigte Berechnung ausführen zu können, muss das BDA „S-Typ“ im Modell definiert sein. Der Wert ist für die initial berechneten Kenngrößen leer. Die Schritte zwei und drei können durch eine ForEach Schleife über alle Kenngrößenmatrizen in je einem Verfahrensschritt umgesetzt werden.
ForEach (MATRIX M, M[S-TYP]= "" & M[MATRIXTYP]=4)
Matrix([CODE] = M[CODE] & [MATRIXTYP] = 4 & [S-TYP] = "avg" & [NAME]
= M[NAME] & [NSEGCODE] = M[NSEGCODE]) := M
Es wird über alle Kenngrößenmatrizen (S-TYP = „“ & MATRIXTYP=4) iteriert und für jede Kenngrößenmatrix eine neue Matrix angelegt. Diese unterscheidet sich lediglich in dem Wert des BDA S-TYP = „avg“. Auf der rechten Seite wird für die Matrixformel eine vereinfachte Schreibweise verwendet. M steht für die initial berechnete Kenngrößenmatrix, über die aktuell iteriert wird.
Das Mitteln der Kenngrößenmatrizen erfolgt ebenfalls in einem Verfahrensschritt:
ForEach(MATRIX M, M[S-TYP]= "" & M[MATRIXTYP]=4)
Matrix([CODE] = M[CODE] & [MATRIXTYP] = 4 & [S-TYP] = "avg" & [NAME]= M[NAME] & [NSEGCODE] = M[NSEGCODE]) := Matrix([CODE] = M[CODE] & [MATRIXTYP] = 4 & [S-TYP] = "avg" & [NAME] = M[NAME] & [NSEGCODE] = M[NSEGCODE]) * 0.5+ Matrix([CODE] = M[CODE] & [MATRIXTYP] = 4 & [S-TYP] = "" & [NAME] = M[NAME] & [NSEGCODE] = M[NSEGCODE]) * 0.5
Auf der linken Seite werden die Kenngrößenmatrizen mit dem BDA S-TYP = „avg“ als Zielmatrizen definiert. Die Matrixformel auf der rechten Seite bildet das Produkt aus berechneter Kenngröße (S-TYP = „“) und dem Wert der gemittelten Matrix. Durch die Kombination der Eigenschaften sind die Matrizen eindeutig definiert.
- Beispiel 2 Matrizen im Verfahrensablauf erzeugen oder zurücksetzen
ForEach(MODUS M, M[CODE] in {”Bus”, ”Tram”}) Matrix([NSEGCODE] = “PT“ & [MODUSCODE] = M[CODE]) := 0
Es wird über den Netzobjekttyp Modus iteriert, wobei die Menge durch die Bedingung auf die Modi “Bus“ und “Tram“ eingeschränkt ist. Sind Ergebnismatrizen mit den definierten Eigenschaften vorhanden, werden deren Werte entsprechend der Berechnungsanweisung auf der rechten Seite auf Null gesetzt. Existieren die Matrizen noch nicht, werden sie erzeugt und mit den Matrixattributen für ModusCode und NSegCode definiert, d.h.
Matrix([NSEGCODE] = “PT“ & [NSEGCODE] = ”Bus“) bzw.
Matrix([NSEGCODE] = “PT“ & [NSEGCODE] = “Tram“)
- Beispiel 3 Erzeugen von neuen Matrizen im Verfahrensablauf unterbinden
ForEach (MODUS M)
Matrix([NSEGCODE] = “PT“ & [MODUSCODE] = M[CODE] | 0) := 0
Dieses Beispiel entspricht im Wesentlichen dem Beispiel 2. Mit dem Zusatz | 0 wird erreicht, dass nur bestehende Matrizen geändert werden, das Erzeugen von neuen Matrizen wird unterdrückt.
- Beispiel 4 Einschränken der Berechnung auf bestimmte Objekte
ForEach (NACHFRAGESCHICHT N, N[CODE] in {”A”,”B”} & N[NACHFRAGEMODELLCODE = “M01“)
Matrix( [NSCHICHTCODE]=N[CODE]) := …
Mit dieser Syntax ist es möglich, die Berechnung auf Nachfrageschichten eines Nachfragemodells “M01“ einzuschränken. Es wird über die Menge der Nachfrageschichten “A“ und “B“ iteriert.
- Beispiel 5 Verwendung von BDAs als Koeffizienten
ForEach (NACHFRAGESCHICHT N)
Matrix([CODE] = "Utility" & [MODUSCODE] ="C" & [NACHFRMODELLCODE] = "M01" & [NSCHICHTCODE] = N[CODE] & [MATRIXTYP] = 4)
:= Matrix([CODE] = "TTC" & [MATRIXTYP] = 4 & [NSEGCODE] = "C") • N[C_TTCCOEFF] + FROM[ACCESSTIMECAR] • N[C_ACCEGRCOEFF] + TO[EGRESSTIMECAR] • N[C_ACCEGRCOEFF] + N[C_CONST]
Für jede Nachfrageschicht wird eine Kenngrößenmatrix (Matrixtyp = 4) mit dem Namen „Utility“ erzeugt. Für die Ergebnismatrizen werden die Matrixattribute für den Code des Nachfragemodells ”M01“, den Code des Modus ”C“ und den Code der Nachfrageschicht definiert. Der Code für die Nachfrageschicht wird mittels der Schleifenvariablen ausgewertet, alle anderen Attributwerte sind fest vorgegeben. Die Berechnung der Matrizen multipliziert die Kenngrößenmatrix mit dem Code “TTC“ mit einem nachfrageschichtabhängigen Attributwert des benutzerdefinierten Attributs C_COEFF und addiert einen Wert, der ebenfalls von der Nachfrageschicht abhängig ist. C_COEFF und C_CONST sind benutzerdefinierte Attribute der Nachfrageschicht, auf die über die Schleifenvariable zugegriffen werden kann, das heißt, die Werte werden in Abhängigkeit von der berechneten Nachfrageschicht ausgewertet.
- Beispiel 6 Verketten von Strings
ForEach (NACHFRAGESCHICHT N, N[NACHFRAGEMODELLCODE] = „M01“)
Matrix([CODE] = "Utility" + “-Bike“ & [MODUSCODE] ="Bike" & [NACHFRMODELLCODE] = N[NACHFRAGEMODELLCODE] & [NSCHICHTCODE] = N[CODE] & [MATRIXTYP] = 4)
:= Matrix([CODE] = "TT0" & [MATRIXTYP] = 4 & [NSEGCODE] = "Bike") * N[BIKE_TT0COEFF] + N[BIKE_CONST]
Es wird über alle Nachfrageschichten des Nachfragemodells “M01“ iteriert, wobei die Schleifenvariable N die jeweilige Nachfrageschicht der Schleife repräsentiert. Für jede Nachfrageschicht wird eine Kenngrößenmatrix berechnet, für die die Matrixattribute CODE, MODUSCODE, NACHFRAGEMODELLCODE und NSCHICHTCODE gesetzt werden. Wie hier für den Wert von CODE gezeigt, können durch + bei der Belegung der Attributwerte Strings verkettet werden. Der NSCHICHTCODE ergibt sich aus dem Attribut CODE der Nachfrageschicht, über die gerade iteriert wird. Die Berechnung, definiert durch die Matrixformel auf der rechten Seite, setzt sich aus der Kenngröße TT0 und nachfrageschichtspezifischen Werten zusammen. Bei letzteren handelt es sich um die benutzerdefinierte Attribute BIKE_TT0COEFF und BIKE_CONST der Nachfrageschicht.